package controllers.Administrador;

import java.util.Collection;

import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import services.MensajeComunidadService;
import services.MensajeService;
import services.VecinoService;
import controllers.AbstractController;
import domain.Mensaje;
import domain.MensajeComunidad;
import domain.Vecino;

@Controller
@RequestMapping("/mensaje/administrador")
public class MensajeAdministratorController extends AbstractController {

	@Autowired
	private MensajeService mensajeService;

	@Autowired
	private VecinoService vecinoService;

	@Autowired
	private MensajeComunidadService mensajeComunidadService;

	public MensajeAdministratorController() {
		super();
	}

	@RequestMapping(value = "/list", method = RequestMethod.GET)
	public ModelAndView list() {
		ModelAndView result;

		Collection<Mensaje> mensajesVecinos;
		Collection<MensajeComunidad> mensajesComunidades;

		mensajesVecinos = mensajeService.findByAdministrador();
		mensajesComunidades = mensajeComunidadService.findByAdministrador();

		result = new ModelAndView("mensaje/list");
		result.addObject("requestURI", "mensaje/administrador/list.do");
		result.addObject("mensajesVecinos", mensajesVecinos);
		result.addObject("mensajesComunidades", mensajesComunidades);
		result.addObject("backURI", "/welcome/index.do");
		return result;
	}

	@RequestMapping(value = "/create", method = RequestMethod.GET)
	public ModelAndView create() {
		ModelAndView result;

		Collection<Vecino> vecinos;
		Mensaje mensaje;
		vecinos = vecinoService.findAll();
		mensaje = mensajeService.create();

		result = new ModelAndView("mensaje/create");
		result.addObject("requestURI", "mensaje/administrador/create.do");
		result.addObject("vecinos", vecinos);
		result.addObject("mensaje", mensaje);
		result.addObject("backURI", "/welcome/index.do");
		return result;
	}

	@RequestMapping(value = "/create", method = RequestMethod.POST, params = "save")
	public ModelAndView createSave(@Valid Mensaje mensaje, BindingResult binding) {
		ModelAndView result;

		if (binding.hasErrors()) {
			result = createEditModelAndView(mensaje);
		} else {
			try {

				mensajeService.save(mensaje);
				result = new ModelAndView("redirect:../../");
			} catch (Throwable oops) {

				result = createEditModelAndView(mensaje, "mensaje.commit.error");
			}
		}

		return result;
	}

	// Ancillary methods
	protected ModelAndView createEditModelAndView(Mensaje mensaje) {
		ModelAndView result;

		result = createEditModelAndView(mensaje, null);

		return result;
	}

	protected ModelAndView createEditModelAndView(Mensaje mensaje,
			String message) {
		ModelAndView result;

		result = new ModelAndView("mensaje/create");
		Collection<Vecino> vecinos;
		vecinos = vecinoService.findAll();
		result.addObject("mensaje", mensaje);
		result.addObject("vecinos", vecinos);
		result.addObject("message", message);

		return result;
	}
}
